表情况:学生表:student(SID学号,SNAME学生姓名,SAGE出生年月,SSEX性别) ; 成绩表:sc(SID学号,CID课程号,SCO成绩) 课程表:course(CID课程号,CNAME课程名称,TID教师号) 教师表:teacher(TID教师号,TNAME教师姓名)
1.求每门课程的学生人数SELECT COURSE.CNAME'课程名称',COUNT(*)'人数'FROM COURSE,SCOREWHERE COURSE.CID = SCORE.CID2.查询课程编号为 01 且课程成绩在 80 分及以上的学生的学号和姓名本题涉及到学生表、成绩表,两个简单的限定条件可以用and进行限定。
SELECT A.SID,A.SNAME FROM STUDENT A,SC BWHERE A.SID=B.SIDAND B.SID='01'AND B.SCORE>=803.统计每门课程的学生选修人数(超过 5 人的课程才统计)本题涉及到课程表中的课程名称,使用成绩表中的学生id进行计数,两个表用CID连接。最后的限定条件是在分组之后进行的,因此使用GROUP BY和Having
SELECT B.CNAME,COUNT(*) FROM SC A,COURSE BWHERE A.CID=B.CIDGROUP BY A.CIDHAVING COUNT(*)>54.检索至少选修两门课程的学生学号本题只需要用到成绩表,限定条件使用having完成。
SELECT SID FROM SCGROUP BY SIDHAVING COUNT(CID)>=25.选修了全部课程的学生信息难点在于如何获取全部课程数量,需要从第三张表额外获取。
SELECT A.* FROM STUDENT A,SC BWHERE A.SID=B.SIDGROUP BY A.SIDHAVING COUNT(CID)=(SELECT COUNT(*) FROM COURSE)6.查询存在不及格的课程值得一提的是,同一门课程不及格的学生可能不止一个,因此要进行去重操作。
SELECT DISTINCT COURSE.CNAME FROM SC,COURSEWHERE SC.CID=COURSE.CIDAND SC.SCORE708.查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)首先是三张表联结,但是因为存在有学生成绩、课程为空值,则需要以学生表为准使用左联结,使用sid字段联结到成绩表,在使用cid字段联结到课程表。
SELECT A.SNAME,B.CNAME,C.SCO FROM STUDENT ALEFT JOIN SC CON A.SID=C.SIDLEFT JOIN COURSE BON B.CID=C.CID9.查询课程名称为「数学」,且分数低于 60 的学生姓名和分数SELECT A.SNAME,B.CNAME,C.SCO FROM STUDENT A,COURSE B,SC CWHERE A.SID=C.SIDAND C.CID=B.CIDAND B.CNAME='%数学%'AND S.SCO=8511.查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列需要查询的字段都在成绩表中,先按照成绩降序,再按照课程号升序。
SELECT CID,AVG(SCO) FROM SCGROUP BY CIDORDER BY AVG(SCORE) DESC,CID ASC12.查询各科成绩最高分、最低分和平均分以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率 优秀率及格为>=60,中等为:60-80,优良为:80-90,优秀为:>=90 要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
及格率、中等率、优良率算出在各个分段的人数后除以总人数得到。使用case when函数进行计数。别忘了逗号
SELECT COURSE.CNAME,SC.CID,AVG(SC.SCORE),MAX(SC.SCORE),MIN(SC.SCORE),COUNT(SC.SID),SUM(CASE WHEN SCORE=90 THEN 1 ELSE 0 END)/COUNT(SC.CID)'优秀率'FROM SC,COURSEWHERE SC.CID=COURSE.CIDGROUP BY SC.CIDORDER BY COUNT(SC.CID) DESC,CID ASC13.查询男生、女生人数SELECT SSEX,COUNT(*) FROM STUDENTGROUP BY SSEX14.检索" 01 "课程分数小于 60,按分数降序排列的学生信息SELECT A.* FROM STUDENT A,SC BWHERE A.SID=B.SIDAND B.CID='01'AND B.SCOC.SCO36.查询学过「张三」老师授课的同学的信息SELECT A.* FROM STUDENT A,TEACHER B,COURSE C,SC DWHERE A.SID=D.SIDAND D.CID=C.CIDAND B.TID=C.TIDAND B.TNAME='张三'37.查询没有学全所有课程的同学的信息还是没选课的同学的问题,需要左联结
SELECT A.* FROM STUDENT A LEFT JOIN SC BON A.SID=B.SIDGROUP BY A.SIDHAVING COUNT(B.CID)